package Day11.polymorphic02;
/*
   向下转型：
     格式：
       子类型  引用类型 =（子类型）父类型引用变量
 */

import org.w3c.dom.ls.LSOutput;

class Person {
    public void eat() {
        System.out.println("吃东西");
    }
}

class Student extends Person {
    public void study() {
        System.out.println("学Java");
    }
}

/*
  这个例子中，我们只有一个学生对象
  但是这个学生对象扮演了两种角色，分别是人和学生
  当扮演人的角色的时候就具有人的行为
  当扮演学生的角色的时候就具有学生的角色
 */
public class Demo02 {
    public static void main(String[] args) {
        Person p = new Student();//我们把现实生活中的一个学生看作一个人
                                 //类比基本数据类型：double d=3//int -->double
                                 //把父类型看作大类型，把子类型看成小类型
                                 //Student-->Person
        p.eat();//由于p指向的学生扮演的是人的角色，所以可以调用Person类中的方法

       // p.stufy();//由于p指向的学生扮演的是人的角色,但是Person类中不具有学生的学习方法，不能调用

        System.out.println("----------");
        Student s=(Student) p;//类比基本数据类型：int i=(int)d//double=>int
                              //person=>Student

        s.study();        //把s指向的学生对象扮演的是学生的角色，所以可以调用学生类的方法
        s.eat();
        ((Student) p).study();

    }
}
